import os
from enum import Enum
from django.db import models
from django.core.files.storage import FileSystemStorage
from yyxt.utils import tokens
from yyxt.settings import USER_PASSWORD, USER_UPLOAD_TO
"""
角1-管理员：
    1:主数据管理/1:补库计划
                2:预约阀值
                3:装卸区（loading_place）
    2:预约管理/  4:预约审批
                5:预约查询
                6:今日计划
    3:车辆管理/  7:
    4:台账管理/  8:台账查询
                9:统计分析
    5:用户管理/  10:
角2-车辆调度员：
    2:预约管理/预约审批-预约查询-今日计划
    3:车辆管理/
角3-小程序
"""


class User(models.Model):
    """用户"""
    STATUS = Enum('status', '删除 启用 禁用', start=0)
    GROUP = Enum('group', '管理员 车辆调度员')
    admin = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 管理员
    yardman = [4, 5, 6, 7]  # 车辆调度员
    GROUPS_INFO = {1: admin, 2: yardman}

    UPLOAD_TO = os.path.join('user', 'icon')  # 等于数据库保存地址
    # 默认头像
    USER_ICON = os.path.join(UPLOAD_TO, 'newuser.png')
    # 设置image_filed根目录位置，与静态资源路径匹配，无视MEDIA_ROOT路径
    upload_storage = FileSystemStorage(location=USER_UPLOAD_TO)

    user_name = models.CharField(max_length=8, unique=True)  # 用户名
    real_name = models.CharField(max_length=8)  # 真实姓名
    job_num = models.CharField(max_length=16, unique=True, null=True)  # 工号
    dep = models.CharField(max_length=64, null=True)  # 所属部门
    tel = models.CharField(max_length=16, null=True)  # 联系电话
    icon = models.ImageField(upload_to=UPLOAD_TO, storage=upload_storage,
                             default=USER_ICON, null=True)  # 用户头像
    # 用户密码(使用Bcrypt算法加密), 默认'00 00 00'
    password = models.CharField(
        max_length=60, default=tokens.set_bcrypt_password(USER_PASSWORD)
    )
    # 用户分组,默认为车辆调度员/2
    group = models.PositiveSmallIntegerField(default=GROUP(1).value)
    # 用户状态[删除/启用/禁用0，1，2，3]
    status = models.PositiveSmallIntegerField(default=STATUS(1).value)

    create_time = models.DateTimeField(auto_now_add=True)  # 用户创建时间

    child_menu = models.ManyToManyField("ChildMenu")  # 权限菜单信息


class Menu(models.Model):
    """一级功能菜单"""
    authName = models.CharField(max_length=32)
    path = models.CharField(max_length=64)  # 一级url
    icon_id = models.CharField(max_length=8)

    class Meta:
        verbose_name = '功能菜单'


class ChildMenu(models.Model):
    """二级菜单信息"""
    authName = models.CharField(verbose_name='标题名', max_length=16)
    path = models.CharField(max_length=64)  # 权限url
    menu = models.ForeignKey("Menu", on_delete=models.SET_NULL, null=True)
    icon_id = models.CharField(max_length=8)
